package br.com.virtual.cadastrar.service.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.virtual.base.enums.ActionFormEnum;
import br.com.virtual.base.exceptions.VirtualValidationException;
import br.com.virtual.cadastrar.dao.PessoaJuridicaDAO;
import br.com.virtual.cadastrar.model.PessoaJuridica;
import br.com.virtual.cadastrar.service.PessoaJuridicaService;
import br.com.virtual.cadastrar.service.PessoaService;

@Stateless
@Local(PessoaJuridicaService.class)
public class PessoaJuridicaServiceImpl implements PessoaJuridicaService {

	@Inject
	private PessoaJuridicaDAO pessoaJuridicaDAO;

	@EJB
	private PessoaService pessoaService;
	
	@Override
	public PessoaJuridica create(PessoaJuridica pessoaJuridica)
			throws VirtualValidationException {
		
		pessoaJuridica.setUsuario(	pessoaService.persistirUsuario(		pessoaJuridica.getUsuario(), ActionFormEnum.CREATE));
		pessoaJuridica.setInteresse(pessoaService.persistirInteresse(	pessoaJuridica.getInteresse(), ActionFormEnum.CREATE));
		
//		pessoaService.persistirEnderecos(pessoaJuridica.getEnderecos(), ActionForm.CREATE);
		
		return pessoaJuridicaDAO.create(pessoaJuridica);
	}

	@Override
	public PessoaJuridica read(Long id) {
		return pessoaJuridicaDAO.read(id);
	}

	@Override
	public void update(PessoaJuridica pessoaJuridica)
			throws VirtualValidationException {
		
		pessoaService.persistirInteresse(pessoaJuridica.getInteresse(), ActionFormEnum.UPDATE);
		pessoaService.persistirUsuario(pessoaJuridica.getUsuario(), ActionFormEnum.UPDATE);
//		pessoaService.persistirEnderecos(pessoaJuridica.getEnderecos(), ActionForm.UPDATE);
		
		pessoaJuridicaDAO.update(pessoaJuridica);
	}

	@Override
	public void delete(PessoaJuridica pessoaJuridica)
			throws VirtualValidationException {
		
		pessoaService.persistirInteresse(pessoaJuridica.getInteresse(), ActionFormEnum.DELETE);
		pessoaService.persistirUsuario(pessoaJuridica.getUsuario(), ActionFormEnum.DELETE);
		pessoaService.persistirEnderecos(pessoaJuridica.getEnderecos(), ActionFormEnum.DELETE);
		
		pessoaJuridicaDAO.delete(pessoaJuridica);
	}

	@Override
	public List<PessoaJuridica> getList() {

		return pessoaJuridicaDAO.getList();
	}

	@Override
	public PessoaJuridica carregar(Long id) {

		PessoaJuridica pj = this.pessoaJuridicaDAO.read(id);
		if (!pj.getEnderecos().isEmpty())
			pj.getEnderecos().get(0);

		return pj;

	}

	@Override
	public PessoaJuridica findByCNPJ(String cnpj) {
		return this.pessoaJuridicaDAO.findByCNPJ(cnpj);
	}
	
}
